package com.duanjc.mergemd.utils;
import com.duanjc.mergemd.constant.FileConsts;

/**
 * 本类用于改变字符串格式，如返回方法名...
 *
 * @author cqh
 * @date 2022/04/24 21:08
 */
public class FileFormatUtils {
    /**
     * 根据属性名得到对应的 set 方法名
     *
     * @param propertyName 属性名
     * @return set 方法名
     */
    public static String getMethodName(String propertyName) {
        char[] chars = propertyName.toCharArray();
        chars[0] -= 32;
        String methodName = "set" + new String(chars);
        return methodName;
    }

    /**
     * 将字符串转成 int 类型
     *
     * @param str 要转换的字符串
     * @return 对应的 int 类型的值，如果转换失败，默认返回 1
     */
    public static int parseToInt(String str) {
        int i = 1;
        try {
            i = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("传入的值不可转成 int 类型");
        }
        return i;
    }

    /**
     * 转化字符串得到结果，使字母与汉字隔一个空格，且单词的首字母大写。<br>
     * 例：传入 "这是java的第1个版本"，得到 "这是 Java 的第 1 个版本"。
     *
     * @param str 要格式化的字符串
     * @return 格式后的字符串
     */
    public static String format(String str) {
        StringBuilder builder = new StringBuilder();
        boolean flag = true;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (flag) {
                if (isLowerCaseLetters(c)) {
                    builder.append(FileConsts.SPACE);
                    builder.append((char) (c - 32));
                    flag = false;
                } else if (isUpperCaseLetters(c) || isNumber(c)) {
                    builder.append(FileConsts.SPACE);
                    builder.append(c);
                    flag = false;
                } else {
                    builder.append(c);
                }
            } else {
                if (isLetters(c) || isNumber(c)) {
                    builder.append(c);
                } else {
                    builder.append(FileConsts.SPACE);
                    builder.append(c);
                    flag = true;
                }
            }
        }
        return builder.toString();
    }

    /**
     * 如果是字母就返回真。
     *
     * @param c 被判断的字符。
     * @return 字符是字母返回 true，否则返回 false。
     */
    public static boolean isLetters(char c) {
        return isLowerCaseLetters(c) || isUpperCaseLetters(c);
    }

    /**
     * 如果是小写字母就返回真。
     *
     * @param c 被判断的字符。
     * @return 字符是小写字母返回 true，否则返回 false。
     */
    public static boolean isLowerCaseLetters(char c) {
        return c >= 'a' && c <= 'z';
    }

    /**
     * 如果是大写字母就返回真。
     *
     * @param c 被判断的字符。
     * @return 字符是大写字母返回 true，否则返回 false。
     */
    public static boolean isUpperCaseLetters(char c) {
        return c >= 'A' && c <= 'Z';
    }

    /**
     * 如果是数字就返回真。
     *
     * @param c 被判断的字符。
     * @return 字符是数字返回 true，否则返回 false。
     */
    public static boolean isNumber(char c) {
        boolean isNumber = c >= '0' && c <= '9';
        return isNumber;
    }
}
